public class VM {
    private final int availableProcessors;
    private final long freeMemory;
    private final long maxMemory;
    private final long totalMemory;
    private final String javaVmName;
    private final String javaVmVendor;
    private final String javaVmVersion;
    private final String javaSpecificationName;
    private final String javaSpecificationVendor;
    private final String javaSpecificationVersion;
    private final String javaRuntimeName;
    private final String javaRuntimeVersion;

    public VM() {
        this.availableProcessors = Runtime.getRuntime().availableProcessors();
        this.freeMemory = Runtime.getRuntime().freeMemory();
        this.maxMemory = Runtime.getRuntime().maxMemory();
        this.totalMemory = Runtime.getRuntime().totalMemory();
        this.javaVmName = System.getProperty("java.vm.name");
        this.javaVmVendor = System.getProperty("java.vm.vendor");
        this.javaVmVersion = System.getProperty("java.vm.version");
        this.javaSpecificationName = System.getProperty("java.specification.name");
        this.javaSpecificationVendor = System.getProperty("java.specification.vendor");
        this.javaSpecificationVersion = System.getProperty("java.specification.version");
        this.javaRuntimeName = System.getProperty("java.runtime.name");
        this.javaRuntimeVersion = System.getProperty("java.runtime.version");
    }

    public static void main(String[] args) {
        VM vm = new VM();

        System.out.println("Available Processors: " + vm.availableProcessors);
        System.out.println("Free Memory: " + vm.freeMemory + " bytes");
        System.out.println("Max Memory: " + vm.maxMemory + " bytes");
        System.out.println("Total Memory: " + vm.totalMemory + " bytes");
        System.out.println("Java VM Name: " + vm.javaVmName);
        System.out.println("Java VM Vendor: " + vm.javaVmVendor);
        System.out.println("Java VM Version: " + vm.javaVmVersion);
        System.out.println("Java Specification Name: " + vm.javaSpecificationName);
        System.out.println("Java Specification Vendor: " + vm.javaSpecificationVendor);
        System.out.println("Java Specification Version: " + vm.javaSpecificationVersion);
        System.out.println("Java Runtime Name: " + vm.javaRuntimeName);
        System.out.println("Java Runtime Version: " + vm.javaRuntimeVersion);
    }
}
